package org.wjw.servlet;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.wjw.dao.BlogDao;
import org.wjw.dao.UserDao;
import org.wjw.model.Blog;
import org.wjw.model.User;
import org.wjw.utils.StringUtil;
import org.wjw.utils.UserUtil;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/user")
public class UserServlet extends HttpServlet {
    // 序列化json的对象
    ObjectMapper objectMapper = new ObjectMapper();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 设置编码
        req.setCharacterEncoding("utf-8");
        resp.setContentType("application/json; charset=utf-8");
//        // 从session中获取用户信息
//        HttpSession session = req.getSession(false);
//        // 判断session对象是否为空
//        if (session == null) {
//            // 返回403 状态码
//            resp.setStatus(403);
//            return;
//        }
//        // 从session中获取用户信息
//        User user = (User) session.getAttribute("userInfo");

        // 通过封装的工具类判断用户登录状态
        User user = UserUtil.checkUserLoginStatus(req);
        if (user == null) {
            // 返回403 状态码
            resp.setStatus(403);
            return;
        }
        // 获取参数
        String blogId = req.getParameter("blogId");
        String jsonString = null;
        // 检验参数是否为空
        if (StringUtil.isEmpty(blogId)) {
            // 直接返回当前登录用户的信息
            jsonString = objectMapper.writeValueAsString(user);
        } else {
            // 根据博客Id构造出用户信息
            // 1. 查询博客信息
            BlogDao blogDao = new BlogDao();
            Blog blog = blogDao.selectById(Long.valueOf(blogId));
            // 这里可以加非空校验，判断查出来的blog对象是否为空
            // 2. 获取用户Id
            Long userId = blog.getUserId();
            // 3. 通过UserId在User表中查询用户信息
            UserDao userDao = new UserDao();
            User author = userDao.selectById(userId);

            // 比较当前登录的用户Id与数据库中查出来的用户Id
            // 如果用户Id相等，则当前登录用户就是作者，否则不是
            int isAuthor = user.getId() == author.getId() ? 1 : 0;
            // 设置是否为作者
            author.setIsAuthor(isAuthor);

            // 也可以加一个非空校验
            // 4. 序列化在json字符串
            jsonString = objectMapper.writeValueAsString(author);
        }
        // 校验通过
        resp.setStatus(200);
//        resp.getWriter().write("{\"code\":200}");
        // 返回User的Json字符串
        resp.getWriter().write(jsonString);
    }
}
